﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using IView;
using Engine;
using DataTransferObject;
using DataTransferObject.DiaryAndTrackingTask.SupportClassForDiary;

namespace Presenter
{
    public class PresenterNLPTaskForm
    {
        private JskeEngine jskeEngine = JskeEngine.getInstance(0);
        private NLPEngine nlpEngine = NLPEngine.getInstance();
        private INLPTaskForm _view;

        private List<String> taskListText = new List<string>();
        private List<String> eventListText = new List<string>();
        private List<Task> taskListTest = new List<Task>();
        private List<JskeEvent> eventListTest = new List<JskeEvent>();
        public PresenterNLPTaskForm(INLPTaskForm view)
        {
            this._view = view;
        }
        public void parseTask(String taskTxt)
        {
            if (_view.getMultiChecked())
            {
                String[] listTaskTxt = taskTxt.Split('\n');
                if (listTaskTxt.Length > 0)
                {
                    for (int i = 0; i < listTaskTxt.Length; i++)
                    {
                        if (!listTaskTxt[i].Trim().Equals(""))
                        {
                            _view.setTaskParseStatus("Start processing");
                            parseOneTask(listTaskTxt[i].Trim());
                        }
                    }
                }
                _view.showMessageBox("The parse has been completed sucessfully!");
            }
            else if (_view.getTestCaseChecked())
            {
                // Chạy test case
                generateTestCase();
                runTestCase();
            }
            else
            {
                parseOneTask(taskTxt.Trim());
            }
        }

        private void parseOneTask(String taskTxt)
        {
            Object result = nlpEngine.partTaskTxt(taskTxt);
            int fail = 0;
            try
            {
                DataTransferObject.Task taskResult = (DataTransferObject.Task)result;
                if (taskResult.Name.Trim() != "")
                {
                    _view.displayTask(taskResult, taskTxt);
                }
            }
            catch (Exception ex)
            {
                fail += 1;
            }
            try
            {
                DataTransferObject.DiaryAndTrackingTask.SupportClassForDiary.JskeEvent eventResult = (DataTransferObject.DiaryAndTrackingTask.SupportClassForDiary.JskeEvent)result;

                if (eventResult.EventName.Trim() != "")
                {
                    _view.displayEvent(eventResult, taskTxt);
                }
            }
            catch (Exception ex)
            {
                fail += 1;
            }
            if (fail == 2)
            {
                _view.setTaskParseStatus("Parse process was failed");
            }
        }

        private void generateTestCase()
        {
            eventListText = new List<string>() {
            "tuần sau đi cắm trại khoảng 4 tiếng siêu quan trọng",
            "3h15 thứ 5 tuần sau đi học ktlt khoảng chừng 3 tiếng - quan trọng",
            "5h tối ngày mai đi câu cá khoảng 40 phút cực kỳ quan trọng  tối thiểu 20'",
            "5h chiều mai đi câu cá khoảng 40 phút cực kỳ quan trọng  tối thiểu 20'",
            "5h chiều Mai Quang Tiến đi câu cá khoảng 40 phút cực kỳ quan trọng  tối thiểu 20'",
            "5h chiều 'Mai đi câu cá khoảng 40 phút cực kỳ quan trọng  tối thiểu 20'"
            };

            eventListTest = new List<JskeEvent>() {
            
            };
        }
        private void runTestCase()
        {

        }
    }
}
